#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>
#include <QDebug>
#include "client.h"
#include "Etat.h"

class MyThread : public QThread
{
    Q_OBJECT

private:
    bool running;

    /*
     * Quand on recoit un des 3 evenements MAIN, une de ces valeurs
     * sera changee et lue par la fenetre
     */
    std::string nomClient;
    std::string nomPartie;
    std::string message;
    sf::Uint8 nbJAct;
    sf::Uint8 nbJMax;

    sf::Uint8 valeurPartie;

    int x;

signals:
    void newClient(QString);
    void newGame(QString, int, int);
    void newMsg(QString);
    void decoC(QString);
    void decoP(QString);
    void joinGame(int);
    void createGame(int);
    void addPartie(QString);
    void rmPartie(QString);
    void datasGame(int, int);
    void addPoint(int, int);
    void idJoueur(int);
    void launch();
    void newClientSalon(QString);
    void delClientSalon(QString);
    void salQuit();
    void changeEtat(int);
    void selectionT(int, int);
    void tmaj(int, int, int, int);
    void win(QString);

public:
    MyThread(std::string, int, bool*);
    ~MyThread();

    Client* _client;
    void run();

    void traitementMain(sf::Packet & p);
    void traitementGame(sf::Packet & p);

    void receptionClient();
    void receptionPartie();
    void receptionMessage();
    void receptionMessageGame();
    void decoClient();
    void decoPartie();
    void receptionCarte();
    void traitementJoinGame();
    void traitementNllePartie();
    void traitementAddPartie();
    void traitementRmPartie();
    void traitementNewClSalon();
    void traitementDelClSalon();
    void traitementSalQuit();

    void traitementGameEtat();
    void traitementSelectionT();
    void traitementTMaj();
    void traitementWin();

    void quitter();

    std::string getNomClient();
    std::string getNomPartie();
    std::string getMessage();
    sf::Uint8 getNbJAct();
    sf::Uint8 getNbJMax();

    sf::Uint8 getValeurPartie();

    Client* getClient();
};

#endif // MYTHREAD_H
